@vint.tri/report_gen_mcp 1.7.28 → 1.7.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,76 @@
1
+ # Главная инструкция по работе с инструментом report_gen_mcp
2
+
3
+ **ЦЕЛЬ:** Генерация качественных, визуально насыщенных HTML-отчетов по запросу пользователя.
4
+
5
+ **КЛЮЧЕВОЕ ПРАВИЛО:** При любом запросе, связанном с отчетами, диаграммами или графиками, **всегда используй инструмент `report_gen_mcp`**. Не пытайся отвечать текстом или генерировать отчеты самостоятельно.
6
+
7
+ ---
8
+
9
+ ### **АЛГОРИТМ ДЕЙСТВИЙ**
10
+
11
+ **Шаг 1: Определи суть запроса**
12
+ - Пойми, о чем пользователь хочет получить отчет (например, "финансовые показатели Apple", "сравнение акций Tesla и Google").
13
+
14
+ **Шаг 2: Спланируй визуальные элементы**
15
+ - Придумай **1-2 диаграммы** и **1 изображение**, которые хорошо проиллюстрируют тему отчета.
16
+ - Для каждой диаграммы определи тип (`bar`, `line`, `pie` и т.д.) и данные.
17
+ - Для изображения придумай текстовый промпт для генерации.
18
+
19
+ **Шаг 3: Подготовь параметры для вызова инструмента**
20
+ - **`document` (string):** Напиши текст отчета в формате Markdown. Вставь в него плейсхолдеры для визуальных элементов, например: `[[chart:sales_chart]]` и `[[image:cover_image]]`.
21
+ - **`elements` (object):** Создай **ОБЪЕКТ**, где ключи — это названия твоих плейсхолдеров, а значения — это конфигурации для их генерации.
22
+ - **`outputFile` (string):** Придумай понятное имя для HTML-файла, например `apple_report_2024.html`.
23
+
24
+ **Шаг 4: Сформируй `elements` ПРАВИЛЬНО (КРИТИЧЕСКИ ВАЖНО!)**
25
+
26
+ - **`elements` — это ОБЪЕКТ, а не строка!**
27
+ - **Для диаграмм:**
28
+ - `labels`, `data`, `backgroundColor`, `borderColor` — **ВСЕГДА МАССИВЫ**, даже для одного значения.
29
+ - `labels`: `["Q1", "Q2"]`
30
+ - `data`: `[100, 150]`
31
+ - `backgroundColor`: `["#FF6384", "#36A2EB"]`
32
+ - `options.title`: **ВСЕГДА СТРОКА**. `"Продажи по кварталам"`
33
+ - **Для изображений:**
34
+ - Используй `type: "pollinations"` и `config: { prompt: "..." }`.
35
+
36
+ ---
37
+
38
+ ### **ИДЕАЛЬНЫЙ ПРИМЕР ВЫЗОВА**
39
+
40
+ ```json
41
+ {
42
+ "method": "generate-report",
43
+ "params": {
44
+ "document": "# Отчет о продажах\n\nАнализ квартальных продаж.\n\n[[chart:sales]]\n\nИзображение, отражающее успех:\n\n[[image:success_image]]",
45
+ "elements": {
46
+ "sales": {
47
+ "type": "bar",
48
+ "config": {
49
+ "labels": ["Q1", "Q2", "Q3", "Q4"],
50
+ "datasets": [{
51
+ "label": "Продажи 2024",
52
+ "data": [120, 150, 130, 180],
53
+ "backgroundColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0"]
54
+ }],
55
+ "options": {
56
+ "title": "Квартальные продажи"
57
+ }
58
+ }
59
+ },
60
+ "success_image": {
61
+ "type": "pollinations",
62
+ "config": {
63
+ "prompt": "business growth and financial success chart"
64
+ }
65
+ }
66
+ },
67
+ "outputFile": "sales_report_2024.html"
68
+ }
69
+ }
70
+ ```
71
+
72
+ ---
73
+
74
+ ### **Что делать после вызова?**
75
+
76
+ Инструмент вернет путь к файлу. Ты должен показать его пользователю вместе со ссылками для просмотра.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA0fA;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAgCjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAsgBA;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAgCjD"}
package/dist/index.js CHANGED
@@ -103,7 +103,7 @@ if (process.argv.length === 2) {
103
103
  // No command specified, run in stdio mode using MCP SDK
104
104
  const mcpServer = new McpServer({
105
105
  name: "report_gen_mcp",
106
- version: "1.7.28"
106
+ version: "1.7.29"
107
107
  }, {
108
108
  // Disable health check to prevent automatic calls
109
109
  capabilities: {
@@ -182,19 +182,26 @@ if (process.argv.length === 2) {
182
182
  tempDirectory: z.string().optional().describe("Temporary directory for file storage (optional, will use REPORTS_DIR environment variable if set)"),
183
183
  },
184
184
  }, async (params) => {
185
- // Handle case where arguments might be sent as a JSON string by Claude desktop
185
+ // --- НАЧАЛО БЛОКА НАДЕЖНОЙ ОБРАБОТКИ ПАРАМЕТРОВ ---
186
186
  let processedParams = params;
187
- if (typeof params === 'string') {
188
- try {
189
- processedParams = JSON.parse(params);
187
+ try {
188
+ // Если параметры - это строка, парсим ее как JSON
189
+ if (typeof processedParams === 'string') {
190
+ processedParams = JSON.parse(processedParams);
190
191
  }
191
- catch (parseError) {
192
- throw new Error('Invalid JSON string in arguments');
192
+ // Если есть вложенный объект `arguments`, используем его
193
+ if (processedParams.arguments && typeof processedParams.arguments === 'object') {
194
+ processedParams = processedParams.arguments;
195
+ }
196
+ // Если `elements` - это строка, парсим и ее
197
+ if (processedParams.elements && typeof processedParams.elements === 'string') {
198
+ processedParams.elements = JSON.parse(processedParams.elements);
193
199
  }
194
200
  }
195
- else if (params.arguments && typeof params.arguments === 'object') {
196
- processedParams = params.arguments;
201
+ catch (e) {
202
+ throw new Error('Invalid JSON format in parameters. Ensure all parameters, especially "elements", are valid JSON.');
197
203
  }
204
+ // --- КОНЕЦ БЛОКА НАДЕЖНОЙ ОБРАБОТКИ ПАРАМЕТРОВ ---
198
205
  // Extract parameters correctly, ensuring outputFile is not nested within elements
199
206
  const { document, elements, charts, outputFile = 'report.html', tempDirectory } = processedParams;
200
207
  // Поддержка обратной совместимости: если переданы charts, используем их как elements
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vint.tri/report_gen_mcp",
3
- "version": "1.7.28",
3
+ "version": "1.7.29",
4
4
  "description": "CLI tool for generating HTML reports with embedded charts and images",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -1,81 +0,0 @@
1
- # Финальные инструкции для нейросети по работе с инструментом report_gen_mcp v1.8.0
2
-
3
- **ВАЖНО:** ВСЕГДА ИСПОЛЬЗУЙТЕ ИНСТРУМЕНТ `report_gen_mcp` КАЖДЫЙ РАЗ, КОГДА ПОЛЬЗОВАТЕЛЬ ЗАПРАШИВАЕТ СОЗДАНИЕ ОТЧЕТА, ВИЗУАЛИЗАЦИЮ ДАННЫХ, ДИАГРАММУ, ГРАФИК ИЛИ ЛЮБОЕ ИЗМЕНЕНИЕ СУЩЕСТВУЮЩЕГО ОТЧЕТА!
4
-
5
- ## 1. Обязательное использование инструмента
6
-
7
- **КЛЮЧЕВОЕ ПРАВИЛО:** При любом запросе пользователя, связанном с созданием или изменением отчетов, диаграмм или графиков, вы **обязаны** использовать инструмент `report_gen_mcp`. Не пытайтесь создавать отчеты вручную.
8
-
9
- ## 2. Требования к качеству отчетов
10
-
11
- Каждый сгенерированный отчет должен быть:
12
- - **Информативным:** Содержать анализ данных, выводы и рекомендации.
13
- - **Визуально насыщенным:** Включать **как минимум одну диаграмму и одно изображение**, релевантные теме отчета.
14
- - **Красиво оформленным:** Использовать заголовки, списки и выделение текста для лучшей читаемости.
15
-
16
- ## 3. Работа с файлами
17
-
18
- - **Сохранение:** Все отчеты автоматически сохраняются в **системную временную директорию**. Вам не нужно указывать полный путь — только имя файла в параметре `outputFile`.
19
- - **Возврат данных:** Инструмент вернет вам полный путь к созданному файлу, который вы должны предоставить пользователю вместе со ссылками для просмотра.
20
-
21
- ## 4. Формат параметров (КРИТИЧЕСКИ ВАЖНО!)
22
-
23
- ### 4.1. Параметр `elements`
24
-
25
- - `elements` **ВСЕГДА** должен быть **ОБЪЕКТОМ**, а не строкой.
26
-
27
- - ❌ **НЕПРАВИЛЬНО:** `"elements": "{...}"`
28
- - ✅ **ПРАВИЛЬНО:** `"elements": {...}`
29
-
30
- ### 4.2. Параметры диаграмм (`charts`)
31
-
32
- - **Массивы, массивы и еще раз массивы!**
33
- - `labels`: **ВСЕГДА** массив строк. `["Январь"]`
34
- - `data`: **ВСЕГДА** массив чисел. `[100]`
35
- - `backgroundColor`: **ВСЕГДА** массив строк. `["red"]`
36
- - `borderColor`: **ВСЕГДА** массив строк. `["blue"]`
37
- - `options.title`: **ВСЕГДА** простая строка. `"Мой график"`
38
-
39
- **Примечание:** Система теперь пытается автоматически исправлять некоторые ошибки форматирования (например, одиночные значения в массивы или парсинг строки `elements`), но для гарантированной работы **всегда** придерживайтесь правильного формата.
40
-
41
- ## 5. Пример идеального вызова
42
-
43
- ```json
44
- {
45
- "method": "generate-report",
46
- "params": {
47
- "document": "# Отчет о продажах\n\nАнализ квартальных продаж.\n\n[[chart:sales]]\n\n![бизнес-успех]([[image:success]])",
48
- "elements": {
49
- "sales": {
50
- "type": "bar",
51
- "config": {
52
- "labels": ["Q1", "Q2", "Q3", "Q4"],
53
- "datasets": [{
54
- "label": "Продажи 2024",
55
- "data": [120, 150, 130, 180],
56
- "backgroundColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0"]
57
- }],
58
- "options": {
59
- "title": "Квартальные продажи"
60
- }
61
- }
62
- },
63
- "success": {
64
- "type": "pollinations",
65
- "config": {
66
- "prompt": "график роста и успеха в бизнесе"
67
- }
68
- }
69
- },
70
- "outputFile": "sales_report.html"
71
- }
72
- }
73
- ```
74
-
75
- ## 6. Ответ пользователю
76
-
77
- После успешной генерации отчета предоставьте пользователю:
78
- 1. **Путь к файлу** (из ответа инструмента).
79
- 2. **Ссылку `file://`** для локального открытия.
80
- 3. **Ссылку `http://localhost:3000/...`** (Web link 2) для надежного отображения всех элементов.
81
- 4. **Полное содержимое HTML-файла**.